﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using _4.Modelado.Seguridad;

namespace _3.Datos.Seguridad
{
    public class PermisoBD
    {
        public DataTable LlenarPermisos(SqlCommand comando)
        {
            try
            {
                string sp = "usp_PermisosConsultar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                var ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];


                return ds.Tables[0];
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public List<Permiso> ConsultarPermisos(SqlCommand comando)
        {
            try
            {
                string sp = "usp_PermisosConsultar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<Permiso> lista = new List<Permiso>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var obj = new Permiso();
                    obj.sPermisoNombre = dt.Rows[i]["PermisoNombre"].ToString();
                    obj.iPKPermiso = Convert.ToInt32(dt.Rows[i]["PK_Permiso"]);
                    obj.sModulo = dt.Rows[i]["Modulo"].ToString();

                    lista.Add(obj);
                }
                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public void InsertarPerfilPermiso(SqlCommand comando, Permiso obj)
        {
            try
            {
                string sp = "usp_PerfilPermisoInsertar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@FK_Perfil", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@FK_Permiso", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@Permiso_Estado", SqlDbType.Bit));


                comando.Parameters[0].Value = obj.iFKPerfil;
                comando.Parameters[1].Value = obj.iPKPermiso;
                comando.Parameters[2].Value = obj.bEstado;



                comando.ExecuteNonQuery();

            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public void EliminarPerfilPermiso(SqlCommand comando, Permiso obj)
        {
            try
            {
                string sp = "usp_PerfilPermisoEliminar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@FK_Perfil", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@FK_Permiso", SqlDbType.Int));
               

                comando.Parameters[0].Value = obj.iFKPerfil;
                comando.Parameters[1].Value = obj.iPKPermiso;



                comando.ExecuteNonQuery();

            }
            catch (Exception e)
            {

                throw e;
            }
        }

        //Pide los permisos del usuario 
        public List<Permiso> ConsultarPermisosActivos(SqlCommand comando, int idPerfil)
        {
            try
            {
                string sp = "usp_PermisosActivosConsultar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();


                comando.Parameters.Add(new SqlParameter("@codPerfil", SqlDbType.VarChar));

                comando.Parameters[0].Value = idPerfil;

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                var ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                var lista = new List<Permiso>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var p = new Permiso();
                    p.bEstado = Convert.ToBoolean(dt.Rows[i]["Permiso_Estado"]);
                    p.iPKPermiso = Convert.ToInt32(dt.Rows[i]["FK_Permiso"]);

                    lista.Add(p);
                }
                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public List<Permiso> ConsultarEstadoPermisos(SqlCommand comando, int CodPerfil)
        {
            try
            {
                string sp = "usp_PerfilConsultarPermiso";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@CodPerfil", SqlDbType.Int));

                comando.Parameters[0].Value = CodPerfil;

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);



                DataTable dt = ds.Tables[0];
                List<Permiso> lista = new List<Permiso>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var obj = new Permiso();
                    obj.sPermisoNombre = dt.Rows[i]["PermisoNombre"].ToString();
                    obj.iPKPermiso = Convert.ToInt32(dt.Rows[i]["FK_Permiso"]);
                    obj.sModulo = dt.Rows[i]["Modulo"].ToString();
                    obj.bEstado = Convert.ToBoolean(dt.Rows[i]["Permiso_Estado"]);


                    lista.Add(obj);
                }
                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }
    }
}
